from PyQt5.QtWidgets import QLabel, QVBoxLayout, QWidget
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QMovie
import os


class LoadingOverlay(QWidget):
    """
    一个覆盖在窗口中央的加载动画（非模态）。
    可通过 start() 和 stop() 方法控制显示与隐藏。
    """
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setAttribute(Qt.WA_TranslucentBackground)  # 背景透明
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool)  # 无边框窗口，工具窗口
        self.setAttribute(Qt.WA_ShowWithoutActivating)  # 不激活窗口
        self.setFixedSize(parent.size())  # 和父窗口一样大

        # 布局
        layout = QVBoxLayout(self)
        self.loading_label = QLabel(self)
        self.loading_label.setAlignment(Qt.AlignCenter)

        # 动态 GIF 动画
        gif_path = os.path.join(os.path.dirname(__file__), "../../assets/loading.gif")
        self.movie = QMovie(gif_path)
        self.loading_label.setMovie(self.movie)

        # 设置中心布局
        layout.addStretch()
        layout.addWidget(self.loading_label)
        layout.addStretch()

    def start(self):
        """显示加载动画"""
        self.movie.start()
        self.show()

    def stop(self):
        """隐藏加载动画"""
        self.movie.stop()
        self.hide()

    def resizeEvent(self, event):
        """调整大小时，保持与父窗口对齐"""
        if self.parent():
            self.setFixedSize(self.parent().size())
        super().resizeEvent(event)